package com.orm.handler;

import java.sql.JDBCType;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


/**
 * 枚举类型  实际存入到数据库是 作为 String 存入的 ，取出时按String 取出，用枚举名字生成 枚举
 * @param <E>
 */
public class EnumTypeHandler<E extends Enum<E>> extends BaseTypeHandler<Enum<E>> {
	private Class<E> type;
	
	public EnumTypeHandler(Class<E> type) {
		this.type = type;
	}
	
	@Override
	public void setNotNullParameter(PreparedStatement ps, int i, Enum<E> parameter, JDBCType jdbcType) throws SQLException {
		ps.setString(i, parameter.name());       // 枚举就按照 枚举的name() 属性进行换成数据库的列
	}
	
	@Override
	public Enum<E> getNullableResult(ResultSet rs, String columnName) throws SQLException {
		String s = rs.getString(columnName);
		return s == null ? null : Enum.valueOf(type, s);  // 转换为枚举，按照  String -> 枚举类 来转换  ，数据库 列属性是 字符串
	}
	
	@Override
	public Enum<E> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		String s = rs.getString(columnIndex);
		return s == null ? null : Enum.valueOf(type, s);  // 转换为枚举，按照
	}
}

